/**
 * flatDataJsonText是一个二维数组
 * 如：[
 * [1,第一部分,性别,0.1,性别,0.1.1,A,男,单选,20140501],
 * 2,第一部分,性别,0.1,性别,0.1.2,B,女,单选,20140501]
 * ]
 */
function convertToObject(flatDataJsonText) {
	if (flatDataJsonText == null) {
		return null;
	}

	//转换为JSON对象
	var flatData = eval("(" + flatDataJsonText + ")");
	
	if (flatData == null || flatData.length <= 0) {
		return null;
	}

	//每行数据的长度,防止数组指标越界
	var titlesLength = 9;

	// 每行数据中各个位置代表什么,总长度就上上面的titlesLength
	var index_sno = 0; 
	var index_question_dl = 1; 
	var index_question_no = 2;
	var index_question_attri_desc = 3;
	var index_option_no = 4;
	var	index_option_xx = 5;
	var index_option_detail = 6;
	var index_input_type = 7;
	var index_version = 8;
	
	/* 因为数组中的元素是按照QUESTION_DL, QUESTION_NO, OPTION_NO进行排序, 所以就可以遍历数组，把对象树组装起来  */
	var questionAll = {};
	var questiondls = [];//大类数组
	var questions = []; //问题数组
	var options = [];//选项数组
	
	var questiondl = {};//大类对象
	var question = {};//问题对象
	var option = {};//选项对象
	
	var tempQuestionDL = "";//大类DL的临时变量
	var tempQuestionNo = "";//问题编号的临时变量
	var tempOptionNo = "";//选项编号的临时变量
	
	var allLength = flatData.length;
	for(var i = 0; i < allLength; i++ ){
		var rowData = flatData[i];
		if(rowData == null || rowData.length != titlesLength){
			//和标题不匹配
			continue;
		}
		
		// 过滤性别和出生年月
		if ("性别".localeCompare(rowData[index_question_attri_desc]) == 0
				|| "出生年月日".localeCompare(rowData[index_question_attri_desc]) == 0) {
			continue;
		}
		
		//questionAll 最外层的Version
		questionAll.version = rowData[index_version];
		
		//先比较《大类》对象是否更换
		if(tempQuestionDL.localeCompare(rowData[index_question_dl]) != 0){		
			//换了《大类》，因此子对象数组《问题》就需要变成一个新数组
			questions = [];//并new一个新的question数组
				
			//说明换了大类了,因此要new一个新的大类对象， 并放入大类数组中
			questiondl = {};
			//设置对象属性
			questiondl.desc = rowData[index_question_dl];
			questiondl.questions = questions;//question数组挂入
			
			questiondls.push(questiondl);
			tempQuestionDL = questiondl.desc;//重新定义这个临时的		
		}
			
		//再比较《问题》有没换	
		if(tempQuestionNo.localeCompare(rowData[index_question_no]) != 0){
			//换了《问题》，因此子对象数组《选项》就需要变成一个新数组
			options = [];//并new一个新的options数组

			//说明换了《问题》，因此要new一个新的《问题》对象，并放入《问题数组》中
			question = {};
			
			//设置对象属性
			question.no = rowData[index_question_no];
			question.question_attri_desc = rowData[index_question_attri_desc];
			question.input_type = rowData[index_input_type];
			question.options = options;//options数组挂入
			
			questions.push(question);
			tempQuestionNo = question.no;//重新定义这个临时的		
		} 
		
		//最后比较《选项》有没换
		if(tempOptionNo.localeCompare(rowData[index_option_no]) != 0){
			//说明换了《选项》，因此要new一个新的《选项对象》，并放入《选项数组》中
			option = {};
			
			//设置对象属性
			option.no = rowData[index_option_no];
			option.xx = rowData[index_option_xx];
			option.detail = rowData[index_option_detail];
			
			options.push(option);
			tempOptionNo = option.no;//重新定义这个临时的
		}
		
	}
	
	//挂入《大类数组》
	questionAll.question_dls = questiondls;
		
	return questionAll;
}